{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "c2e6a0db-784f-47cd-9735-1b3d7fd63e64",
   "metadata": {},
   "source": [
    "This file is for evaluating the coverage rate of generated Q&As to paper. We hope 10 answers should roughly cover the majority of the content of the paper).\n",
    "\n",
    "We calculate similarity score between each answer vs. each paper sentence. ious)\r\n",
    "\r\n",
    "We use e5-mistral-7b-instruct (paper: https://arxiv.org/pdf/2401.00368.pdf) as embedding model. It utilizes the power of LLM to capture rich contextual information of natural language. Also, it offers a more contextual-based similarity measurement through task-defining by using pro.\r\n",
    "\r\n",
    "```jsx\r\n",
    "task = 'Given the Question & Answer pair, retrieve relevant sentences to this answer.'\r\n",
    "queries = [get_detailed_instruct(task, f\"{i['Q']}\\n{i['A']}\") for i in data['Q&A']]\r\n",
    "documents = split_into_sentences(data['txt'])\r\n",
    "```\r\n",
    "\r\n",
    "By using ‘task’ as part of query, we strengthen that we want to measure the similarity between answer and paper sentence from the aspect of how much a paper sentence is related with this answer."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "23218e27",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(dict_keys(['source', 'doi', 'abstract', 'keywords', 'txt', 'title', 'num_Q&A', 'Q&A', 'raw_output']),\n",
       " 184)"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# read file for evaluation, the file is a list of dict with keys shown in following\n",
    "# please enter your file path at 'file_path' variable\n",
    "import json\n",
    "def read(file_path):\n",
    "    with open(file_path, 'r') as file:\n",
    "        datas = json.load(file) \n",
    "    return datas\n",
    "\n",
    "file_path = ''\n",
    "datas = read(file_path)\n",
    "datas[0].keys(), len(datas)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "96f98d2e-bb51-40f6-955a-b9364aae9d1d",
   "metadata": {},
   "source": [
    "### Calculation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "fe8bfe0a-fd24-4ef7-a0cf-2a0463bfc1e5",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Loading checkpoint shards: 100%|█████████████████████████████████| 2/2 [00:03<00:00,  1.70s/it]\n"
     ]
    }
   ],
   "source": [
    "import torch\n",
    "import torch.nn.functional as F\n",
    "from torch import Tensor\n",
    "from transformers import AutoTokenizer, AutoModel\n",
    "\n",
    "\n",
    "# get embedding value of the last layer\n",
    "def last_token_pool(last_hidden_states: Tensor,\n",
    "                 attention_mask: Tensor) -> Tensor:\n",
    "    left_padding = (attention_mask[:, -1].sum() == attention_mask.shape[0])\n",
    "    if left_padding:\n",
    "        return last_hidden_states[:, -1]\n",
    "    else:\n",
    "        sequence_lengths = attention_mask.sum(dim=1) - 1\n",
    "        batch_size = last_hidden_states.shape[0]\n",
    "        return last_hidden_states[torch.arange(batch_size, device=last_hidden_states.device), sequence_lengths]\n",
    "\n",
    "\n",
    "def get_detailed_instruct(task_description: str, query: str) -> str:\n",
    "    return f'Instruct: {task_description}\\nQuery: {query}'\n",
    "\n",
    "\n",
    "tokenizer = AutoTokenizer.from_pretrained('/fl/model/mixtral/e5-mistral-7b-instruct')\n",
    "model = AutoModel.from_pretrained('/fl/model/mixtral/e5-mistral-7b-instruct')\n",
    "model.eval()\n",
    "\n",
    "# max length should be the max token length of both queries and documents\n",
    "max_length = 1028"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "38aaa903",
   "metadata": {},
   "outputs": [],
   "source": [
    "import re\n",
    "import gc\n",
    "import time\n",
    "\n",
    "# split paper to sentence\n",
    "def split_into_sentences(text):\n",
    "    # Regular expression for splitting sentences\n",
    "    sentence_endings = r'(?<!\\w\\.\\w.)(?<![A-Z][a-z]\\.)(?<=\\.|\\?)\\s'\n",
    "    sentences = re.split(sentence_endings, text)\n",
    "    \n",
    "    # Filter out any empty strings\n",
    "    sentences = [sentence.strip() for sentence in sentences if sentence.strip()]\n",
    "    return sentences\n",
    "\n",
    "\n",
    "# sort paper sentences' similarity score from high to low of each Q&A, recode both paper sentences' index and similarity score\n",
    "def sort_and_reformat_2d_list(list_2d):\n",
    "    sorted_2d_list = []\n",
    "    for sublist in list_2d:\n",
    "        # Sorting each sublist with scores in descending order and keeping track of original indices\n",
    "        sorted_sublist = sorted(\n",
    "            [(index, score) for index, score in enumerate(sublist)], \n",
    "            key=lambda x: x[1], \n",
    "            reverse=True\n",
    "        )\n",
    "        sorted_2d_list.append(sorted_sublist)\n",
    "    return sorted_2d_list\n",
    "\n",
    "\n",
    "# main function to calculate similarity score and record results into json file\n",
    "def para_div_mistral(data, index):\n",
    "    fn = data['doi'].replace('/', '-')\n",
    "\n",
    "    # Each query must come with a one-sentence instruction that describes the task\n",
    "    task = 'Given the Question & Answer pair, retrieve relevant sentences to this answer.'\n",
    "    queries = [get_detailed_instruct(task, f\"{i['Q']}\\n{i['A']}\") for i in data['Q&A']]\n",
    "    documents = split_into_sentences(data['txt'])\n",
    "    \n",
    "    m = len(queries)\n",
    "    n = len(documents)\n",
    "    \n",
    "    input_texts = queries + documents\n",
    "    \n",
    "    # Tokenize the input texts\n",
    "    batch_dict = tokenizer(input_texts, max_length=max_length - 1, return_attention_mask=False, padding=False, truncation=True)\n",
    "    # append eos_token_id to every input_ids\n",
    "    batch_dict['input_ids'] = [input_ids + [tokenizer.eos_token_id] for input_ids in batch_dict['input_ids']]\n",
    "    batch_dict = tokenizer.pad(batch_dict, padding=True, return_attention_mask=True, return_tensors='pt')\n",
    "\n",
    "    with torch.no_grad():\n",
    "        outputs = model(**batch_dict)\n",
    "        embeddings = last_token_pool(outputs.last_hidden_state, batch_dict['attention_mask'])\n",
    "    \n",
    "    # normalize embeddings\n",
    "    embeddings = F.normalize(embeddings, p=2, dim=1)\n",
    "    scores = (embeddings[:m] @ embeddings[m:].T) * 100\n",
    "    \n",
    "    similarity_dict = sort_and_reformat_2d_list(scores.tolist())\n",
    "    store = {idx:str(i) for idx, i in enumerate(similarity_dict)}\n",
    "    with open(f'{pth}/q_paragraph_sim/{index}.{fn}.json', 'w') as json_file:\n",
    "        json.dump(store, json_file, indent=4)\n",
    "\n",
    "    del batch_dict\n",
    "    del outputs\n",
    "    del embeddings\n",
    "    del scores\n",
    "    gc.collect()\n",
    "\n",
    "    if torch.cuda.is_available():\n",
    "        torch.cuda.empty_cache()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "6c718e60-0937-4ee2-a0ae-1577d6038fe4",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3\n",
      "4\n",
      "5\n",
      "6\n",
      "7\n",
      "8\n",
      "9\n",
      "10\n",
      "11\n",
      "12\n",
      "13\n",
      "14\n",
      "15\n",
      "16\n",
      "17\n",
      "18\n",
      "19\n",
      "20\n",
      "21\n",
      "22\n",
      "23\n",
      "24\n",
      "25\n",
      "26\n",
      "27\n",
      "28\n",
      "29\n",
      "30\n",
      "31\n",
      "32\n",
      "33\n",
      "34\n",
      "35\n",
      "36\n",
      "37\n",
      "38\n",
      "39\n",
      "40\n",
      "41\n",
      "42\n",
      "43\n",
      "44\n",
      "45\n",
      "46\n",
      "47\n",
      "48\n",
      "49\n",
      "50\n",
      "51\n",
      "52\n",
      "53\n",
      "54\n",
      "55\n",
      "56\n",
      "57\n",
      "58\n",
      "59\n",
      "60\n",
      "61\n",
      "62\n",
      "63\n",
      "64\n",
      "65\n",
      "66\n",
      "67\n",
      "68\n",
      "69\n",
      "70\n",
      "71\n",
      "72\n",
      "73\n",
      "74\n",
      "75\n",
      "76\n",
      "77\n",
      "78\n",
      "79\n",
      "80\n",
      "81\n",
      "82\n",
      "83\n",
      "84\n",
      "85\n",
      "86\n",
      "87\n",
      "88\n",
      "89\n",
      "90\n",
      "91\n",
      "92\n",
      "93\n",
      "94\n",
      "95\n",
      "96\n",
      "97\n",
      "98\n",
      "99\n",
      "100\n",
      "101\n",
      "102\n",
      "103\n",
      "104\n",
      "105\n",
      "106\n",
      "107\n",
      "108\n",
      "109\n",
      "110\n",
      "111\n",
      "112\n",
      "113\n",
      "114\n",
      "115\n",
      "116\n",
      "117\n",
      "118\n",
      "119\n",
      "120\n",
      "121\n",
      "122\n",
      "123\n",
      "124\n",
      "125\n",
      "126\n",
      "127\n",
      "128\n",
      "129\n",
      "130\n",
      "131\n",
      "132\n",
      "133\n",
      "134\n",
      "135\n",
      "136\n",
      "137\n",
      "138\n",
      "139\n",
      "140\n",
      "141\n",
      "142\n",
      "143\n",
      "144\n",
      "145\n",
      "146\n",
      "147\n",
      "148\n",
      "149\n",
      "150\n",
      "151\n",
      "152\n",
      "153\n",
      "154\n",
      "155\n",
      "156\n",
      "157\n",
      "158\n",
      "159\n",
      "160\n",
      "161\n",
      "162\n",
      "163\n",
      "164\n",
      "165\n",
      "166\n",
      "167\n",
      "168\n",
      "169\n",
      "170\n",
      "171\n",
      "172\n",
      "173\n",
      "174\n",
      "175\n",
      "176\n",
      "177\n",
      "178\n",
      "179\n",
      "180\n",
      "181\n",
      "182\n",
      "183\n"
     ]
    }
   ],
   "source": [
    "from pathlib import Path\n",
    "Path(f'{pth}/q_paragraph_sim').mkdir(parents=True)\n",
    "\n",
    "# path to record results\n",
    "pth = ''\n",
    "\n",
    "for index, i in enumerate(datas):\n",
    "    print(index)\n",
    "    para_div_mistral(i, index)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "27ee4e0f-4cda-4af8-bb5e-7b721ec5a118",
   "metadata": {},
   "source": [
    "### Visualization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "9540394d-0099-417e-94a4-4c6ac1994552",
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "import ast\n",
    "import numpy as np\n",
    "from scipy.stats import entropy\n",
    "\n",
    "colors = ['#FF7F50', '#40E0D0', '#6495ED', '#D8BFD8', '#98FB98', '#F0E68C', '#87CEFA', '#DDA0DD', '#7FFFD4', '#DEB887', '#5F9EA0', '#FFDAB9', '#7B68EE', '#F4A460', '#F08080']\n",
    "def load_data(file_path):\n",
    "    with open(file_path, 'r') as file:\n",
    "        data = json.load(file)\n",
    "    \n",
    "    data = {int(i): ast.literal_eval(data[i]) for i in data}    \n",
    "    return data\n",
    "\n",
    "\n",
    "# transform data from [qa, sentence] to [sentence, qa]\n",
    "def transform_data(file_path):\n",
    "    data = load_data(file_path)\n",
    "    # Find the number of paragraphs and Q&As\n",
    "    paragraph_count = len(data[0])\n",
    "    qa_count = len(data)\n",
    "\n",
    "    # Initialize a 2D array for storing similarity scores\n",
    "    similarity_matrix = np.zeros((paragraph_count, qa_count))\n",
    "\n",
    "    # Populate the similarity matrix\n",
    "    for qa_index, pairs in data.items():\n",
    "        for pair in pairs:\n",
    "            paragraph_index, sim_score = pair\n",
    "            similarity_matrix[int(paragraph_index), int(qa_index)] = sim_score\n",
    "\n",
    "    return similarity_matrix\n",
    "\n",
    "\n",
    "# std evaluation\n",
    "def calculate_metrics(similarity_matrix, save_pth):\n",
    "    std_per_paragraph = np.std(similarity_matrix, axis=1)\n",
    "    # entropy_per_paragraph = [entropy(similarity_matrix[i, :]) for i in range(len(std_per_paragraph))]\n",
    "\n",
    "    with open(save_pth, 'w') as file:\n",
    "        for s in std_per_paragraph:\n",
    "            file.write(str(s) + '\\n')\n",
    "        \n",
    "    return std_per_paragraph"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "a5f2cbb3-e094-4b5f-9379-40031d8d6491",
   "metadata": {},
   "outputs": [],
   "source": [
    "# scatter plot: show the top 10 sentences’ similarity score for each answer\n",
    "def scatter_vis(similarity_dict, save_pth):\n",
    "    idx = []\n",
    "    for i in similarity_dict:\n",
    "        idx.append([j[0] for j in similarity_dict[i][:10]])\n",
    "\n",
    "    # plt.figure(figsize=(7, 4))\n",
    "    for i, indices in enumerate(idx):\n",
    "        y_values = [i+1] * len(indices)  # Same y-value for each list\n",
    "        plt.scatter(indices, y_values, color=colors[i], label=f'QA {i+1}')\n",
    "\n",
    "    plt.xlabel('Sentence Index')\n",
    "    plt.xlim(0, len(similarity_dict[0]))\n",
    "    plt.ylabel('QA Index')\n",
    "    plt.yticks(range(1, i+2, 1))\n",
    "    plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')\n",
    "    plt.tight_layout()\n",
    "    # plt.show()\n",
    "    plt.savefig(save_pth)\n",
    "    plt.close()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "a97ea990-e4c4-4489-bbe3-39daa7cb8b8d",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "# heatmap plot: show all sentences’ similarity score for each answer \n",
    "def heatmap_vis(similarity_matrix, save_pth):\n",
    "    plt.figure(figsize=(20, 3))\n",
    "    sns.heatmap(similarity_matrix.T, annot=False, cmap=\"coolwarm\")\n",
    "    plt.title(\"Heatmap of Paragraph-Q&A Similarity Scores\")\n",
    "    plt.xlabel(\"Sentence Index\")\n",
    "    plt.ylabel(\"Q&A Index\")\n",
    "    # plt.show()\n",
    "    plt.tight_layout()\n",
    "    plt.savefig(save_pth)\n",
    "    plt.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "e3b54c8f-bd97-46de-883e-38dd360ee13f",
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "from tqdm.notebook import tqdm\n",
    "\n",
    "from pathlib import Path\n",
    "Path(f'{pth}/fig').mkdir(parents=True)\n",
    "Path(f'{pth}/std').mkdir(parents=True)\n",
    "\n",
    "# main function to generate plots & std scores and record them into files\n",
    "for i in range(len(datas)):\n",
    "    data = datas[i]\n",
    "    fn = data['doi'].replace('/', '-')\n",
    "    path = f'{pth}/q_paragraph_sim/{i}.{fn}.json'\n",
    "\n",
    "    scatter_pth = f'{pth}/fig/{i}.{fn}_scatter.png'\n",
    "    similarity_dict = load_data(path)\n",
    "    scatter_vis(similarity_dict, scatter_pth)\n",
    "\n",
    "    heatmap_pth = f'{pth}/fig/{i}.{fn}_heatmap.png'\n",
    "    similarity_matrix = transform_data(path)\n",
    "    heatmap_vis(similarity_matrix, heatmap_pth)\n",
    "\n",
    "    std_pth = f'{pth}/std/{i}.{fn}.txt'\n",
    "    std = calculate_metrics(similarity_matrix, std_pth)\n",
    "    # print(std)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "6d0db957-ff06-4875-aa83-1548a32b9066",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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WLNmDfr06aMfp9Vq8cADDyAnJwejRo0yGS8wMBAAsHPnTpSWltrtO08Koa1jy3cwdv6DwQ4VCpw/f75dSYmppqYGfn5+qK6uhq+vr9TpEBERkRmk/vxuamrSn/vp4eFh8fa3rzZgTDLC0Bviz6ugoADDhg1DbGws3n33XURGRuLUqVOYNWsWVCoVfvjhB/j4+OCjjz7CokWLcPnyZYObTQHAM888A51Oh6+++qrVGFlZWYiNjUVQUBD279+PGTNmYOLEifjwww+tztuSelt05FWj0VidFBEREZGr6A1fJCMMW1FscATWFyqMQohNGlcAiI6OxuHDhzF//nwkJyejtLQUgiDgqaeewqpVq/TX6M/MzMTYsWNbNK4AMG7cODz//PMoKyvTH12905kzZ5Ceno6KigpERETgzTffxGuvvWaT+bTGoiOvciT1b25ERERkOak/v9t75PU2HQRcRAPqcBM+//9UATEvj2WOefPmYfHixcjNzcXQoUPtGttcNjvySkRERETmc4NC1MthWWPBggWIiIjAgQMHMHjwYLtdFcBW2LwSEREROblJkyZJnYJo5N16ExEREZFLEb15raioEHuXREREREQARGxec3JykJycjHvuuUesXRIRERERGWjXOa8XL15EZmYmVq5cicrKSiQlJeHf//63WLm5HJ2gQ4lQggY0wAteCFYEw01hvzM7TMW3NDdr5mKvbVyBPZ4vah1r2TrWhYjEYnHzev36daxbtw7/+te/sHfvXowYMQK//PILjh07hn79+oma3Pz587FgwQKDx3r16oWff/5Z1DiO4LzuPPbp9qEe9frHvOGNYW7D0MPN9rdbMxUfgEW5WTMXe23jCiytC+soHtaydawLEYnJol97f/e73yE0NBQff/wxxo4di19++QXffPMNFAoFlEqlTRLs06cPiouL9cuePXtsEkdK53XnkavLNXhjB4B61CNXl4vzOtvesayt+JbkZs1c7LWNK7C0LqyjeFjL1rEuRCQ2i5rXZcuW4ZVXXkFOTg7S0tIQEBBgq7z0VCoVgoOD9Utrd3qQM52gwz7dPpNj9un2QSfoJItvyp25WTMXe23jCiytC+soHtaydawLEdmCRc3rqlWrcOjQIYSEhOCZZ57B5s2bodVqbZUbgFv36A0NDUWPHj2QkpKCS5cumRzf3NyMmpoag8WRlQglLY5I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CB555BE88cQTOHXqlNSpiUanE7BmT73V26/ZWw+dzvrfP6SOT+Ix57nk8+X4xHwerdmXveO3NwYRuR6Hbl4fe+wxjB49GtHR0YiJicF7770HHx8fHDhwwOg2zc3NqKmpMVgcWUHxTYM/mVmqsu7W+WJyjU/iMee55PPl+MR8Hq3Zl73jtzcGEbkeh25e76TVarFmzRrU19cjPj7e6LiFCxfCz89Pv4SFhdkxS8tVNegk3YfU8Uk85j4PfL4cm5jPozX7kiK+rbYnIufk8M3riRMn4OPjA3d3d/z2t7/F+vXr0bt3b6Pj09PTUV1drV+KiorsmK3l/L3a/xS0Zx9SxyfxmPs88PlybGI+j9bsS4r4ttqeiJyTw78z9OrVC3l5eTh48CBeffVVvPDCCzh9+rTR8e7u7vD19TVYHFl0iAqdvK2/LEwnHwWiQ6y/aITU8Uk85jyXfL4cn5jPozX7snf89sYgItfj8M2rWq1GVFQU7rvvPixcuBADBgzAxx9/LHVaonFz+9/lqKwx/n7vdl0TUer4JB5znks+X45PzOfRmn3ZO357YxCR63H45vVuOp0Ozc3NUqchqkE91Xg10afFEYpOPgq8muhjcp0Yl5KROj6Jp63nks+XPIj5PFqzL3vFT/yVB1+rRGQxh77Oa3p6OpKSktC9e3fU1tbiiy++wAcffIBt27YhISHBrH3I6TpxUt/hSur4JB4+X86Bd9giVyanz2+yL4duXl988UXs2LEDxcXF8PPzQ//+/fHGG2+Y3bgCfPETERHJET+/yRiHPhs+IyND6hSIiIiIyIHI7pxXIiIiInJdbF6JiIiISDbYvBIRERGRbLB5JSIiIiLZYPNKRERERLLB5pWIiIiIZIPNKxERERHJBptXIiIiIpINNq9EREREJBtsXomIiIhINti8EhEREZFssHklIiIiItlg80pEREREssHmlYiIiIhkg80rEREREckGm1ciIiIikg02r0REREQkG2xeiYiIiEg22LwSERERkWyweSUiIiIi2WDzSkRERESyweaViIiIiGSDzSsRERERyQabVyIiIiKSDTavRERERCQbKqkTkAutIOBEcz3KtTcQoOyAfu7eUCoUUqdlN5bO3171skccUzFc/XXhLMR8Hh31NeFMP5NE5NocunlduHAh1q1bh59//hmenp4YNmwYPvjgA/Tq1cuueexuqMKSiiu4pr2hfyxI2QHTOofiIS9/u+YiBUvnb6962SOOqRgAXPp14SzEfB056nuFM/1MEhEpBEEQpE7CmFGjRmH8+PH49a9/jZs3b+KPf/wjTp48idOnT8Pb29usfdTU1MDPzw/V1dXw9fW1OIfdDVWYd+2i0fULgsKd+k3Z0vnbq172iNNWDFOc/XXhLMR8HTnqe4Uz/UySa2nv5zc5L4c+53Xr1q2YOHEi+vTpgwEDBmDFihW4dOkSjh49apf4WkHAkoorJscsqbgCreP2/+1i6fztVS97xDEnhi3jk+2J+Tpy1PcKZ/qZJCK6zaGb17tVV1cDADp37mx0THNzM2pqagwWa51orjf481drrmlv4ERzvdUxHJml87dXvewRx5wYtoxPtifm68hR3yuc6WeSiOg22TSvOp0OM2fOxP3334++ffsaHbdw4UL4+fnpl7CwMKtjlpvZvJg7Tm4snb+96mWPOGI8p876unAWYr6OHPW9wpl+JomIbpNN85qWloaTJ09izZo1Jselp6ejurpavxQVFVkdM0DZQdRxcmPp/O1VL3vEEeM5ddbXhbMQ83XkqO8VzvQzSUR0myya12nTpmHz5s347rvv0K1bN5Nj3d3d4evra7BYq5+7N4LaeLMN+v+XgnFGls7fXvWyRxxzYtgyPtmemK8jR32vcKafSSKi2xy6eRUEAdOmTcP69euxc+dOREZG2jW+UqHQXxLJmGmdQ532GoaWzt9e9bJHHHNi2DI+2Z6YryNHfa9wpp9JIqLbHPpSWVOnTsUXX3yBjRs3Glzb1c/PD56enmbtQ4xLbbj6tQt5nVde59WZ8Tqv4uXlqPMneeKlssgYh25eFUZ+S8/KysLEiRPN2odYL35Xv2sM77DFO2w5M95hS35xyPmxeSVjHLp5FQNf/ERERPLDz28yxqHPeSUiIiIiuhObVyIiIiKSDTavRERERCQbbF6JiIiISDbYvBIRERGRbLB5JSIiIiLZYPNKRERERLLB5pWIiIiIZIPNKxERERHJBptXIiIiIpINNq9EREREJBtsXomIiIhINti8EhEREZFssHklIiIiItlg80pEREREssHmlYiIiIhkg80rEREREckGm1ciIiIikg02r0REREQkG2xeiYiIiEg22LwSERERkWyweSUiIiIi2WDzSkRERESyweaViIiIiGSDzSsR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BJ9//jmOHz8OjUaDr776CosWLcITTzwBABgxYgTi4+Px5JNPIicnBxcuXMC+ffvw5ptv4siRI2bHioiIwMGDB3HhwgWUlZVBp9MhLS0NFRUVePbZZ3H48GEUFhZi27ZtmDRpUotG15jhw4fjoYcewrhx45CbmwuNRoMtW7Zg69atAIA33ngD+/btw7Rp05CXl4eCggJs3LjR4i9smeLj44MXX3wRs2bNws6dO3Hy5ElMnDgRbm7/ezuNiYlBSkoKJkyYgHXr1kGj0eDQoUNYuHAh/vvf/wIAPv30U+zfvx8rV65ESkoKnnzySaSkpOD69eui5UpE5IzYvBK5CB8fHwwZMgR/+9vf8NBDD6Fv37546623MGXKFCxZsgTArT+Pf/vtt3jooYcwadIkxMTEYPz48bh48SK6du1qdqw//OEPUCqV6N27N4KCgnDp0iWEhoZi79690Gq1GDlyJPr164eZM2fC39/foPFry9dff41f//rXePbZZ9G7d2/Mnj1b3/z2798fu3btwtmzZ/Hggw9i4MCBmDt3LkJDQy0rVhv+8pe/4MEHH8Rjjz2GESNG4IEHHsB9991nMCYrKwsTJkzA66+/jl69euHJJ5/E4cOH0b17d/z888+YNWsWli5dirCwMADA0qVLUVZWhrfeekvUXImInI1CEARB6iSIiIiIiMzBI69EREREJBtsXomIiIhINti8EhEREZFssHklIiIiItlg80pEREREssHmlYiIiIhkg80rEREREckGm1ciIiIikg02r0REREQkG2xeiYiIiEg22LwSERERkWz8P1sp0+lO0GaiAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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/RwOhwYOHKiZM2eqRo0acjqd7ss/OBwO91lOnnjiCQ0fPlySVKFCBXf/7Ny5U82aNVPt2rWzraNq1apq3bp1jnXu2LFDxphsn0+Hw5Hl+ZT+OavIkCFDVL58eTmdTpUpU0a9e/fW4cOH3fc5ePCg7rrrLpUsWVLh4eGqXbu2pk+fniXn7Pe2CRMmuN83fv/9d0nSH3/8of/85z8qUqSIwsPDVb9+fc2fPz9LxqlTp/Tkk0+qcuXKCg8PV9GiRXXjjTdq0aJFOf68AAAAAIArC2c0AAAAAGBdUlJSli/Lzjh16tR565599lmNGjVK3bp10913361Dhw7p1VdfVdOmTfXLL7+4T2v+8ccfKzU1Vffff7+KFi2qVatW6dVXX9Xff/+tjz/+WJJ07733au/evVq0aJHee++9bGubOXOmMjIy9OCDD+ro0aMaP368unXrpubNm2vp0qUaMWKEtm3bpldffVXDhg3TO++8437stGnTFBUVpaFDhyoqKkrffvutHn/8cSUnJ+v555/Psp1jx47plltuUbdu3dSjRw999NFHuv/++xUWFqZ+/frl+vzdfffdmj59uv7zn//ov//9r1auXKkxY8Zo06ZNmjNnjiTpvffe05tvvqlVq1a5L4fQuHHjXHOzs337dklS0aJF9eeff2ru3Lnq2rWrKlSooAMHDmjy5Mlq1qyZfv/99/POePD0008rLCxMw4YNU3p6usLCwvT77797lZGSkqLmzZtr3759euihhxQbG6v3339fS5YsybbOI0eOqG3bturevbvuuOMOlSxZUpK938nYsWMVFBSkYcOGKSkpSePHj1fPnj21cuVKj8/pZ599Jknq3bt3trfHxMSoY8eOmj59urZv365KlSpJ+mcyRIUKFTR69Gi1atXK61P6z5w5U//6178UGxur7t27a+TIkfrss8+ynC0hOyVKlFBERIQ+++wzPfjggypSpIhX2ztbZmam2rZtq6ZNm2r8+PGaOXOmBg4cqMjISD366KPq2bOnOnfurDfeeEO9e/dWo0aNVKFCBZ+28corr6hDhw7q2bOnMjIyNGvWLHXt2lWff/652rVrl+W+3377rT766CMNHDhQxYoVU/ny5c/L69y5s7Zs2aIPPvhAL7/8sooVKyZJKl68uHr16qX+/fvr119/Vc2aNd2P+fnnn7VlyxY99thjOdZZrlw5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3HNPrnVI/0xM6NGjh5KTk7Vy5UpNmzZN77//vtq3b69ff/1V4eHhOT42PDw8y5fb0j+9U6ZMmfN+tzExMV5NfjjX559/rmeeeUbr1q3LMsni3Hwp+9ekr3r37q0PP/xQ33//vZo2bapvvvlGBw4cUK9evTw+NigoSAMGDNCAAQN05MgR/fjjj3rjjTe0YMECde/eXd9//72kfy5ZcvbkkOzs2rVLlStXdk/cOaN69eru28927s++bds2GWM0atQojRo1KtttHDx4UKVLl9ZTTz2ljh07qkqVKqpZs6batGmjXr16nTc5DAAAAABw5WKiAQAAAICLhsvlksPh0IIFCxQcHHze7VFRUZL++Yvim2++WUePHtWIESNUrVo1RUZGas+ePerbt69cLpfX28xuO7mtP/NXzYmJiWrWrJmio6P11FNPqVKlSgoPD9fatWs1YsQIn2rwRnZfovorODhYLVu2zPH25557TqNGjVK/fv309NNPq0iRIgoKCtLgwYOz/fnOPZtBXjK8ld22bP5OPL0eXnjhBT355JPu9eXKldPOnTslSVdffbXWrVun3bt3nzdh4YwNGzZIkipWrChJ+umnn1SuXDmVKlVKktSiRQu999576tGjh/r166fx48dr7ty5euaZZ9wZW7du1c8//yxJ2U7WmTlzplcTDc6Ijo7WzTffrJtvvlmhoaGaPn26Vq5cqWbNmuX4mLz2k7e+//57dejQQU2bNtWkSZNUqlQphYaGaurUqXr//ffPu392rxNftW7dWiVLltSMGTPUtGlTzZgxQ7Gxsbn2TnaKFi2qDh06qEOHDrrpppu0bNky7dq1S+XKlfO7xuyc+7Ofef0PGzZMrVu3zvYxZyb2NG3aVNu3b9e8efP09ddf6+2339bLL7+sN954I8sZKwAAAAAAVy4mGgAAAAC4aFSqVEnGGFWoUMH9l+XZ2bhxo7Zs2aLp06erd+/e7vWLFi067742vqCXpKVLl+rIkSP69NNP1bRpU/f6HTt2ZHv/vXv3KiUlJctf0G/ZskWSVL58+Ry3U65cOblcLm3dutX9l8uSdODAASUmJlr7klKSPvnkE/3rX//SlClTsqxPTExUsWLFAppRrlw5/f777zLGZPmdbdu2zet6L9TvJDu9e/fWjTfe6P7/2V/ytm/fXu+//77effddPfbYY+c9Njk5WfPmzVPdunXdEw0cDof27dun06dPuy/h0a1bNx08eFAPPvigvvvuOxUuXDjLxIGZM2cqNDRU77333nlf7P/www/63//+l+tkh9zUr19f06dP1759+3x+bCDNnj1b4eHh+uqrr7KcyWHq1Kl+5eb2PhEcHKzbb79d06ZN07hx4zR37lz1798/x8kT3qhfv76WLVumffv2qVy5cqpUqZJ+/fXXXB9Trlw5bdiwQS6XK8tZDc5cEsTTe8GZ11ZoaKhXkySKFCmiO++8U3feeadOnDihpk2b6oknnmCiAQAAAABAkhTk+S4AAAAAcGF07txZwcHBevLJJ8/7S2djjPtU8Ge+4Dv7PsYYvfLKK+dlnvkSOTExMaC1ZldDRkaGJk2alO39T58+rcmTJ2e57+TJk1W8eHHVq1cvx+3ccsstkqQJEyZkWf/SSy9Jktq1a5en+r0RHBx83u/h448/znJt+UBltG7dWnv27NH8+fPd69LS0vTWW2/5tC3J/u8kOxUrVlTLli3dyw033OC+rUuXLqpRo4bGjh2r1atXZ3mcy+XS/fffr2PHjunRRx91r2/ZsqVOnjypMWPGZLn/wIED1bp1a+3cuVM333xzlkkSM2fOVJMmTXTbbbfpP//5T5Zl+PDhkqQPPvggx58hNTVVy5cvz/a2BQsWSJKqVq3q5TNiR3BwsBwOR5ZLcOzcuVNz5871K9fT+0SvXr107Ngx3XvvvTpx4oTuuOMOj5n79+/X77//ft76jIwMLV68OMslUbp06aL169drzpw5593/zOv5lltu0f79+/Xhhx+6bzt9+rReffVVRUVF5XqmCemfy3LcdNNNmjx5crYTRg4dOuT+95n32jOioqJ01VVXZblUBQAAAADgysYZDQAAAABcNCpVqqRnnnlGCQkJ2rlzpzp16qSCBQtqx44dmjNnju655x4NGzZM1apVU6VKlTRs2DDt2bNH0dHRmj17drbXez/zhfGgQYPUunVrBQcHq3v37n7X2rhxYxUuXFh9+vTRoEGD5HA49N577+V4Kvi4uDiNGzdOO3fuVJUqVfThhx9q3bp1evPNNxUaGprjdmrXrq0+ffrozTffdF8aYNWqVZo+fbo6deqkf/3rX37/LDn597//raeeekp33nmnGjdurI0bN2rmzJnuv4wOZMa9996r1157TT169NBDDz2kUqVKaebMmQoPD5fk3ZkpLtTvxFehoaGaPXu2mjdvrhtvvFF33nmn6tevr8TERL3//vtau3atHnnkEXXu3Nn9mP79+2vGjBl6/PHHtXr1arVq1UqnT5/W3Llz9f333+uGG27QtGnT1KRJE/Xr108rV67Utm3bNHDgwGxrKF26tOrWrauZM2dqxIgR2d4nNTVVjRs31vXXX682bdqobNmySkxMdG+zU6dOqlOnTsCel7xo166dXnrpJbVp00a33367Dh48qIkTJ+qqq65yX34iL868Tzz66KPq3r27QkND1b59e/cEhDp16qhmzZr6+OOPVb16ddWtW9dj5t9//60GDRqoefPmatGihWJjY3Xw4EF98MEHWr9+vQYPHuw+q8fw4cP1ySefqGvXrurXr5/q1auno0ePav78+XrjjTdUu3Zt3XPPPZo8ebL69u2rNWvWqHz58vrkk0/0448/asKECSpYsKDHmiZOnKgbb7xR11xzjfr376+KFSvqwIEDWr58uf7++2+tX79e0j+X+7jppptUr149FSlSRKtXr9Ynn3yS4+sLAAAAAHDlYaIBAAAAgIvKyJEjVaVKFb388svua96XLVtWrVq1UocOHST988XtZ599pkGDBmnMmDEKDw/XrbfeqoEDB6p27dpZ8jp37qwHH3xQs2bN0owZM2SMCchEg6JFi+rzzz/Xf//7Xz322GMqXLiw7rjjDrVo0SLb658XLlxY06dP14MPPqi33npLJUuW1Guvvab+/ft73Nbbb7+tihUratq0aZozZ45iY2OVkJCg0aNH+/1z5OaRRx5RSkqK3n//fX344YeqW7euvvjiC40cOTLgGVFRUfr222/14IMP6pVXXlFUVJR69+6txo0bq0uXLu4JB7m5kL8TX1WtWlXr16/X2LFjNW/ePL3zzjvKyMiQJE2ZMkX9+vXLcv/w8HAtWbJEzz33nGbNmqUFCxYoOjpazZo10/Lly1WnTh21aNFC9913n8qVK6d58+ZJ+ucyDTlp3769nnjiCW3YsEG1atU67/ZChQrprbfe0hdffKGpU6dq//79Cg4OVtWqVfX8889r0KBBAXxG8qZ58+aaMmWKxo4dq8GDB6tChQruySL+TDS47rrr9PTTT+uNN97QwoUL5XK5tGPHjixnjOjdu7cefvhh9erVy6vMqlWrasKECfryyy81adIkHThwQOHh4apZs6beeust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p3yqAwAAAAAAAAAAAACA/GKMI8flYuT1RINq1arpmWee0TfffKMWLVqoY8eOevLJJ923//jjjypXrpxPG7/zzju1fft2SdLbb7+te++9V/Xr19ejjz6q6667Tv3799c777yTa8aYMWMUExOTZXlx+sc+1QEAAAAAAAAAAAAAQH7JdOW8XIxCvL3jc889py5dumj27Nlq1aqVZs2apRtvvFHXXnutvvvuO/33v//V0KFDfdr41q1bVblyZUnSpEmT9Morr6h///7u26+77jo9++yz6tevX44ZCQkJ52331PpvfKoDAAAAAAAAAAAAAID8crFeIiEnXk80aNOmjY4ePSpJcjqdevLJJ9WpUydlZGTIGKPu3btr2LBhPm28QIECOnz4sMqVK6c9e/aoQYMGWW5v2LBhlksrZMfpdMrpdGZZdyIs1Kc6AAAAAAAAAAAAAADIL8bkdwW+8frSCVLWL/VHjx6tffv26aefftLu3bv1/vvvKyTE63kLkqS2bdvq9ddflyQ1a9ZMn3zySZbbP/roI1111VU+ZQIAAAAAAAAAAAAAcCnJdDlyXC5Gvs0MOMvhw4cVFhamhg0b5nnj48aN0w033KBmzZqpfv36evHFF7V06VJVr15dmzdv1ooVKzRnzpw85wMAAAAAAAAAAAAAcLFzufK7At/4dEaDxMREDRgwQMWKFVPJkiVVuHBhxcbGKiEhQampqT5vPC4uTr/88osaNWqkhQsXyhijVatW6euvv1aZMmX0448/6pZbbvE5FwAAAAAAAAAAAACAS4XL5LxcjLw+o8HRo0fVqFEj7dmzRz179lT16tUlSb///rteffVVLVq0SD/88IM2bNigFStWaNCgQV7lFipUSGPHjtXYsWPz9hMAAAAAAAAAAAAAAHAJc12kl0jIiddnNHjqqacUFham7du3a/LkyRo8eLAGDx6sN998U9u2bVNGRoZ69eqlm2++WTExMTZrBgAAAAAAAAAAAADgspHpynnxxRNPPCGHw5FlqVatmvv2tLQ0DRgwQEWLFlVUVJS6dOmiAwcO+Fyv12c0mDt3riZPnqySJUued1tsbKzGjx+vW265RaNHj1afPn18LiSQTFCw3Q0cT7QaH1Li/Oc4kDL27LGaH5Z63Gq+QkKtRRdy+n4JEF8c3bbPan6hXZut5p+qep3VfGfpWKv5mSePWcvetuYv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",
      "text/plain": [
       "<Figure size 3000x200 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.41154641 1.29837416 2.28342309 2.18635851 1.07102187 1.06121235\n",
      " 1.37305586 2.03499774 4.10025095 1.24763383 1.4790665  1.68890383\n",
      " 2.19042579 3.08353144 1.51901186 1.84897401 1.40898526 2.99617066\n",
      " 1.98298873 2.07820054 1.74044707 2.81598733 1.12719126 2.83646172\n",
      " 2.92631699 3.20892531 3.22173823 2.61337237 3.04253633 1.76254683\n",
      " 2.83291144 2.03236853 2.64782792 2.23085286 2.54225635 0.89448461\n",
      " 1.48999372 1.6999309  1.71835923 1.32670568 2.80344675 3.58095048\n",
      " 2.16398396 1.52273923 3.03005522 2.14093647 2.23808934 1.73677101\n",
      " 2.64981999 2.08308722 2.01708275 2.1355617  1.52431735 1.55521876\n",
      " 1.28550685 2.12819948 1.1489214  2.24223883 1.65336815 1.95377368\n",
      " 1.42769913 1.62459885 2.2602334  2.30572565 1.23538481 1.21852284\n",
      " 1.16869662 2.09766001 1.80790841 2.46610451 2.40155894 1.92988032\n",
      " 2.5864678  2.54680066 1.7593305  1.54486483 1.55192184 1.55192184]\n"
     ]
    }
   ],
   "source": [
    "file_path = '/fl/code/Attention-Visualization/paragraph diversity/q_paragraph_sim/0.10.1038-nmat1035.json'\n",
    "\n",
    "similarity_dict = load_data(file_path)\n",
    "scatter_vis(similarity_dict)\n",
    "\n",
    "similarity_matrix = transform_data(file_path)\n",
    "heatmap_vis(similarity_matrix)\n",
    "\n",
    "std = calculate_metrics(similarity_matrix)\n",
    "print(std)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ca6894e6-f002-47d3-8ac3-a79d8f8cfbf5",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "ab7d8839-b79f-430f-9691-dbfec7c04178",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Instruct: Given the Question & Answer pair, retrieve relevant sentences to this answer.\n",
      "Query: Q: What are the key factors that can affect the deformation behaviour of nanocrystalline metals?\n",
      "A: The key factors that can affect the deformation behaviour of nanocrystalline metals include the grain size, the grain-boundary-based deformation mechanism, the elastic constants, the plastic deformation rate, and the initial stress.\n",
      "\n",
      "\n",
      "Relevant sentence: \n",
      "77.5809097290039 These insights suggest a novel deformation-mechanism map for nanocrystalline f.c.c. metals, which captures this crossover in both the prevailing deformation mechanism and the mechanical behaviour.\n",
      "Relevant sentence: \n",
      "76.96704864501953 Simulations for idealized, fully three-dimensional (3D) nanocrystalline-Al microstructures with a grain size of up to 32 nm provided a detailed understanding of (i) the processes of dislocation nucleation and glide in the nanograins and (ii) the crossover with decreasing grain size in the deformation mechanism and in the related mechanical behaviour, from dislocation slip to a grain-boundary-based deformation process 20.\n",
      "Relevant sentence: \n",
      "76.52606964111328 Here we construct a deformation-mechanism map based on fundamental physical processes in the deformation of nanocrystalline f.c.c. metals.\n",
      "Relevant sentence: \n",
      "76.31757354736328 These processes involve GB diffusion creep, that is, coupled GB sliding 21,22,23 and GB diffusion 25, resulting in the inverse Hall–Petch behaviour of the nanocrystalline metal 20,34.\n",
      "Relevant sentence: \n",
      "75.80504608154297 Our deformation map is based on the physics of nucleation and propagation of dislocations in nanocrystalline f.c.c. metals at room temperature, as exposed by MD simulation.\n",
      "--------------------------------------------\n",
      "Instruct: Given the Question & Answer pair, retrieve relevant sentences to this answer.\n",
      "Query: Q: How does the grain size affect the deformation behaviour of nanocrystalline metals?\n",
      "A: As the grain size becomes smaller, the strength of the grain boundaries becomes larger, leading to a decrease in the deformation rate. Additionally, the presence of dislocations is affected by the grain size, with more dislocations observed in larger grains.\n",
      "\n",
      "\n",
      "Relevant sentence: \n",
      "80.0165786743164 Simulations for idealized, fully three-dimensional (3D) nanocrystalline-Al microstructures with a grain size of up to 32 nm provided a detailed understanding of (i) the processes of dislocation nucleation and glide in the nanograins and (ii) the crossover with decreasing grain size in the deformation mechanism and in the related mechanical behaviour, from dislocation slip to a grain-boundary-based deformation process 20.\n",
      "Relevant sentence: \n",
      "78.03450012207031 Whereas in the high-SFE metal, the small grain size enables the GB-mediated deformation to dominate, the larger grain size in the low-SFE metal favours the partial dislocation slip.\n",
      "Relevant sentence: \n",
      "77.87339782714844 In summary, our study reveals how the crossover with decreasing grain size from dislocation-driven to GB-mediated deformation depends on the stacking-fault energy, the elastic properties of the material, and the magnitude of the applied stress.\n",
      "Relevant sentence: \n",
      "77.06558227539062 In Region I, characteristic of a large grain size and/or a high-SFE metal, slip deformation prevails as the grains are larger than In Region II, characteristic of a small grain size and/or a low-SFE metal, only incomplete dislocations can be nucleated; the grains are therefore transected by stacking faults that inhibit dislocation propagation, thus giving rise to strain hardening.\n",
      "Relevant sentence: \n",
      "76.99705505371094 These processes involve GB diffusion creep, that is, coupled GB sliding 21,22,23 and GB diffusion 25, resulting in the inverse Hall–Petch behaviour of the nanocrystalline metal 20,34.\n",
      "--------------------------------------------\n",
      "Instruct: Given the Question & Answer pair, retrieve relevant sentences to this answer.\n",
      "Query: Q: What is the main advantage of using molecular-dynamics simulation in studying the deformation behaviour of nanocrystalline metals?\n",
      "A: The main advantage of using molecular-dynamics simulation in studying the deformation behaviour of nanocrystalline metals is that it allows for the investigation of the internal structure and dynamics of the nucleated dislocations at the atomic level. This is in contrast to experimental techniques, which can only provide macroscopic observations.\n",
      "\n",
      "\n",
      "Relevant sentence: \n",
      "78.51842498779297 Our deformation map is based on the physics of nucleation and propagation of dislocations in nanocrystalline f.c.c. metals at room temperature, as exposed by MD simulation.\n",
      "Relevant sentence: \n",
      "78.2429428100586 The knowledge for these processes comes from modelling the nanocrystalline microstructure at the atomic level by using molecular-dynamics (MD) simulation.\n",
      "Relevant sentence: \n",
      "77.88325500488281 This map provides a bridge between the fundamental physics of plastic deformation as exposed by MD simulation, and experiments towards deconvoluting the deformation behaviour of nanocrystalline materials.\n",
      "Relevant sentence: \n",
      "75.46764373779297 These insights suggest a novel deformation-mechanism map for nanocrystalline f.c.c. metals, which captures this crossover in both the prevailing deformation mechanism and the mechanical behaviour.\n",
      "Relevant sentence: \n",
      "75.32622528076172 Simulations for idealized, fully three-dimensional (3D) nanocrystalline-Al microstructures with a grain size of up to 32 nm provided a detailed understanding of (i) the processes of dislocation nucleation and glide in the nanograins and (ii) the crossover with decreasing grain size in the deformation mechanism and in the related mechanical behaviour, from dislocation slip to a grain-boundary-based deformation process 20.\n",
      "--------------------------------------------\n",
      "Instruct: Given the Question & Answer pair, retrieve relevant sentences to this answer.\n",
      "Query: Q: How does the grain-boundary-based deformation mechanism affect the deformation behaviour of nanocrystalline metals?\n",
      "A: In the grain-boundary-based deformation mechanism, the strain is accommodated by the movement of the grain boundaries, which can result in the formation of dislocations if the boundaries are not flexible enough. Understanding the grain-boundary-based deformation mechanism is essential to predicting the deformation behaviour of nanocrystalline metals.\n",
      "\n",
      "\n",
      "Relevant sentence: \n",
      "78.69793701171875 Simulations for idealized, fully three-dimensional (3D) nanocrystalline-Al microstructures with a grain size of up to 32 nm provided a detailed understanding of (i) the processes of dislocation nucleation and glide in the nanograins and (ii) the crossover with decreasing grain size in the deformation mechanism and in the related mechanical behaviour, from dislocation slip to a grain-boundary-based deformation process 20.\n",
      "Relevant sentence: \n",
      "77.76155090332031 Combining the two mechanisms one gets: These insights into the dislocation-nucleation mechanism and the structure of the dislocations in nanocrystalline f.c.c. metals can be captured in a deformation-mechanism map.\n",
      "Relevant sentence: \n",
      "77.2409439086914 These insights suggest a novel deformation-mechanism map for nanocrystalline f.c.c. metals, which captures this crossover in both the prevailing deformation mechanism and the mechanical behaviour.\n",
      "Relevant sentence: \n",
      "76.59091186523438 Here we construct a deformation-mechanism map based on fundamental physical processes in the deformation of nanocrystalline f.c.c. metals.\n",
      "Relevant sentence: \n",
      "76.50483703613281 Our deformation map is based on the physics of nucleation and propagation of dislocations in nanocrystalline f.c.c. metals at room temperature, as exposed by MD simulation.\n",
      "--------------------------------------------\n",
      "Instruct: Given the Question & Answer pair, retrieve relevant sentences to this answer.\n",
      "Query: Q: What are the three main deformation modes of nanocrystalline metals?\n",
      "A: The three main deformation modes of nanocrystalline metals are: \n",
      "   1. Grain-boundary-based deformation, \n",
      "   2. Dislocation-based deformation, and \n",
      "   3. Mixing-based deformation.\n",
      "\n",
      "\n",
      "Relevant sentence: \n",
      "80.47969818115234 Simulations for idealized, fully three-dimensional (3D) nanocrystalline-Al microstructures with a grain size of up to 32 nm provided a detailed understanding of (i) the processes of dislocation nucleation and glide in the nanograins and (ii) the crossover with decreasing grain size in the deformation mechanism and in the related mechanical behaviour, from dislocation slip to a grain-boundary-based deformation process 20.\n",
      "Relevant sentence: \n",
      "78.65585327148438 Combining the two mechanisms one gets: These insights into the dislocation-nucleation mechanism and the structure of the dislocations in nanocrystalline f.c.c. metals can be captured in a deformation-mechanism map.\n",
      "Relevant sentence: \n",
      "78.35619354248047 Our deformation map is based on the physics of nucleation and propagation of dislocations in nanocrystalline f.c.c. metals at room temperature, as exposed by MD simulation.\n",
      "Relevant sentence: \n",
      "77.95108795166016 Here we construct a deformation-mechanism map based on fundamental physical processes in the deformation of nanocrystalline f.c.c. metals.\n",
      "Relevant sentence: \n",
      "77.13924407958984 The map shows three distinct regions in which either complete extended dislocations (Region I) or partial dislocations (Region II), or no dislocations at all (Region III) exist during the low-temperature deformation of nanocrystalline f.c.c. metals.\n",
      "--------------------------------------------\n",
      "Instruct: Given the Question & Answer pair, retrieve relevant sentences to this answer.\n",
      "Query: Q: How does the elastic constant affect the deformation behaviour of nanocrystalline metals?\n",
      "A: The elastic constant affects the deformation behaviour of nanocrystalline metals by determining the strength of the grain boundaries and the plastic deformation rate. The elastic constant represents the sum of the interactions between the atoms in the system and is sensitive to the atomic arrangement in the crystal.\n",
      "\n",
      "\n",
      "Relevant sentence: \n",
      "74.01582336425781 These insights suggest a novel deformation-mechanism map for nanocrystalline f.c.c. metals, which captures this crossover in both the prevailing deformation mechanism and the mechanical behaviour.\n",
      "Relevant sentence: \n",
      "73.06493377685547 Here we construct a deformation-mechanism map based on fundamental physical processes in the deformation of nanocrystalline f.c.c. metals.\n",
      "Relevant sentence: \n",
      "72.37678527832031 The time-dependent plastic strains obtained for the two model materials after subtracting the corresponding elastic strains are compared in The deformation conditions are as for pl = el is obtained by subtracting the elastic strain, el, from the total strain, We interpret these distinct behaviours by observing that up to about 0.4% plastic strain, both systems nucleate only partial dislocations which propagate, with about equal velocity, into the grain interiors, giving rise to rather similar strain rates.\n",
      "Relevant sentence: \n",
      "72.268798828125 Our deformation map is based on the physics of nucleation and propagation of dislocations in nanocrystalline f.c.c. metals at room temperature, as exposed by MD simulation.\n",
      "Relevant sentence: \n",
      "72.23491668701172 These processes involve GB diffusion creep, that is, coupled GB sliding 21,22,23 and GB diffusion 25, resulting in the inverse Hall–Petch behaviour of the nanocrystalline metal 20,34.\n",
      "--------------------------------------------\n",
      "Instruct: Given the Question & Answer pair, retrieve relevant sentences to this answer.\n",
      "Query: Q: What is the role of stress in the deformation behaviour of nanocrystalline metals?\n",
      "A: Stress plays a crucial role in the deformation behaviour of nanocrystalline metals by causing the grain boundaries to deform and potentially leading to the nucleation of dislocations. The amount of stress required to nucleate dislocations depends on the elastic constant and the grain size.\n",
      "\n",
      "\n",
      "Relevant sentence: \n",
      "75.99742126464844 In fact, experiments 5 on nanocrystalline Ni 3Al show dislocation nucleation and propagation for a grain size of 50 nm at a stress of 1.5GPa, that is, very similar to our simulation conditions.\n",
      "Relevant sentence: \n",
      "75.84595489501953 An important aspect of the interplay between dislocation-dominated and GB-mediated deformation processes, characterized by the competition between the two length scales defined by Two identical microstructures with a grain size of 24 nm of the two potentials representing low and high SFE materials were loaded under uniform tensile stress slightly higher than the dislocation-nucleation threshold stress for these potentials (see To ensure similar deformation conditions, each system was loaded under uniform tensile stress approximately 0.1 GPa above its respective dislocation–nucleation threshold stress for this grain size.\n",
      "Relevant sentence: \n",
      "75.64875030517578 These insights suggest a novel deformation-mechanism map for nanocrystalline f.c.c. metals, which captures this crossover in both the prevailing deformation mechanism and the mechanical behaviour.\n",
      "Relevant sentence: \n",
      "75.53626251220703 Simulations for idealized, fully three-dimensional (3D) nanocrystalline-Al microstructures with a grain size of up to 32 nm provided a detailed understanding of (i) the processes of dislocation nucleation and glide in the nanograins and (ii) the crossover with decreasing grain size in the deformation mechanism and in the related mechanical behaviour, from dislocation slip to a grain-boundary-based deformation process 20.\n",
      "Relevant sentence: \n",
      "75.49124145507812 Combining the two mechanisms one gets: These insights into the dislocation-nucleation mechanism and the structure of the dislocations in nanocrystalline f.c.c. metals can be captured in a deformation-mechanism map.\n",
      "--------------------------------------------\n",
      "Instruct: Given the Question & Answer pair, retrieve relevant sentences to this answer.\n",
      "Query: Q: What are the processes that can lead to the nucleation of dislocations in nanocrystalline metals?\n",
      "A: The processes that can lead to the nucleation of dislocations in nanocrystalline metals include grain-boundary-based deformation, dislocation-based deformation, and mixing-based deformation.\n",
      "\n",
      "\n",
      "Relevant sentence: \n",
      "81.59979248046875 Combining the two mechanisms one gets: These insights into the dislocation-nucleation mechanism and the structure of the dislocations in nanocrystalline f.c.c. metals can be captured in a deformation-mechanism map.\n",
      "Relevant sentence: \n",
      "81.11270904541016 Simulations for idealized, fully three-dimensional (3D) nanocrystalline-Al microstructures with a grain size of up to 32 nm provided a detailed understanding of (i) the processes of dislocation nucleation and glide in the nanograins and (ii) the crossover with decreasing grain size in the deformation mechanism and in the related mechanical behaviour, from dislocation slip to a grain-boundary-based deformation process 20.\n",
      "Relevant sentence: \n",
      "79.25505828857422 Our deformation map is based on the physics of nucleation and propagation of dislocations in nanocrystalline f.c.c. metals at room temperature, as exposed by MD simulation.\n",
      "Relevant sentence: \n",
      "78.6693344116211 These processes involve GB diffusion creep, that is, coupled GB sliding 21,22,23 and GB diffusion 25, resulting in the inverse Hall–Petch behaviour of the nanocrystalline metal 20,34.\n",
      "Relevant sentence: \n",
      "77.40476989746094 Here we construct a deformation-mechanism map based on fundamental physical processes in the deformation of nanocrystalline f.c.c. metals.\n",
      "--------------------------------------------\n",
      "Instruct: Given the Question & Answer pair, retrieve relevant sentences to this answer.\n",
      "Query: Q: How does the initial stress affect the deformation behaviour of nanocrystalline metals?\n",
      "A: The initial stress affects the deformation behaviour of nanocrystalline metals by determining the amount of stress present at the onset of deformation. The initial stress can be either externally applied or result from the interaction of the grain boundaries with each other.\n",
      "\n",
      "\n",
      "Relevant sentence: \n",
      "76.285888671875 (As the stress applied to each system, lying ∼0.1 GPa above the respective nucleation-threshold stress, was chosen so as to create similar deformation conditions, these rather similar initial strain rates are to be expected.) At this point, the two curves in This situation in which −3– −2 grain-size dependence of the competing GB-based deformation process (namely GB-diffusion creep) 20,25.\n",
      "Relevant sentence: \n",
      "75.86591339111328 These insights suggest a novel deformation-mechanism map for nanocrystalline f.c.c. metals, which captures this crossover in both the prevailing deformation mechanism and the mechanical behaviour.\n",
      "Relevant sentence: \n",
      "75.39846801757812 An important aspect of the interplay between dislocation-dominated and GB-mediated deformation processes, characterized by the competition between the two length scales defined by Two identical microstructures with a grain size of 24 nm of the two potentials representing low and high SFE materials were loaded under uniform tensile stress slightly higher than the dislocation-nucleation threshold stress for these potentials (see To ensure similar deformation conditions, each system was loaded under uniform tensile stress approximately 0.1 GPa above its respective dislocation–nucleation threshold stress for this grain size.\n",
      "Relevant sentence: \n",
      "74.89208984375 Simulations for idealized, fully three-dimensional (3D) nanocrystalline-Al microstructures with a grain size of up to 32 nm provided a detailed understanding of (i) the processes of dislocation nucleation and glide in the nanograins and (ii) the crossover with decreasing grain size in the deformation mechanism and in the related mechanical behaviour, from dislocation slip to a grain-boundary-based deformation process 20.\n",
      "Relevant sentence: \n",
      "74.79718780517578 These processes involve GB diffusion creep, that is, coupled GB sliding 21,22,23 and GB diffusion 25, resulting in the inverse Hall–Petch behaviour of the nanocrystalline metal 20,34.\n",
      "--------------------------------------------\n",
      "Instruct: Given the Question & Answer pair, retrieve relevant sentences to this answer.\n",
      "Query: Q: What is the main reason for the prevalence of straight lines in the deformation behaviour of nanocrystalline metals?\n",
      "A: The main reason for the prevalence of straight lines in the deformation behaviour of nanocrystalline metals is the presence of dislocations, which affect the overall deformation behaviour of the material. Dislocations tend to align along straight lines, leading to the observation of straight lines in the deformation behaviour of nanocrystalline metals.\n",
      "\n",
      "\n",
      "Relevant sentence: \n",
      "75.56336212158203 Our deformation map is based on the physics of nucleation and propagation of dislocations in nanocrystalline f.c.c. metals at room temperature, as exposed by MD simulation.\n",
      "Relevant sentence: \n",
      "75.18993377685547 These insights suggest a novel deformation-mechanism map for nanocrystalline f.c.c. metals, which captures this crossover in both the prevailing deformation mechanism and the mechanical behaviour.\n",
      "Relevant sentence: \n",
      "75.01919555664062 Combining the two mechanisms one gets: These insights into the dislocation-nucleation mechanism and the structure of the dislocations in nanocrystalline f.c.c. metals can be captured in a deformation-mechanism map.\n",
      "Relevant sentence: \n",
      "73.69210815429688 Simulations for idealized, fully three-dimensional (3D) nanocrystalline-Al microstructures with a grain size of up to 32 nm provided a detailed understanding of (i) the processes of dislocation nucleation and glide in the nanograins and (ii) the crossover with decreasing grain size in the deformation mechanism and in the related mechanical behaviour, from dislocation slip to a grain-boundary-based deformation process 20.\n",
      "Relevant sentence: \n",
      "73.57471466064453 The map shows three distinct regions in which either complete extended dislocations (Region I) or partial dislocations (Region II), or no dislocations at all (Region III) exist during the low-temperature deformation of nanocrystalline f.c.c. metals.\n",
      "--------------------------------------------\n"
     ]
    }
   ],
   "source": [
    "for idx, i in enumerate(sorted_example_list):\n",
    "    print(queries[idx])\n",
    "    print('\\n')\n",
    "    for j in i[:5]:\n",
    "        print('Relevant sentence: ')\n",
    "        print(j[0], documents[j[1]])\n",
    "    print('--------------------------------------------')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "109cb775-ac05-494c-8c2f-0d5c99f308fd",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(77.5809097290039, 56), (76.96704864501953, 13), (76.52606964111328, 7), (76.31757354736328, 45), (75.80504608154297, 12)]\n",
      "[(80.0165786743164, 13), (78.03450012207031, 24), (77.87339782714844, 55), (77.06558227539062, 42), (76.99705505371094, 45)]\n",
      "[(78.51842498779297, 12), (78.2429428100586, 8), (77.88325500488281, 57), (75.46764373779297, 56), (75.32622528076172, 13)]\n",
      "[(78.69793701171875, 13), (77.76155090332031, 30), (77.2409439086914, 56), (76.59091186523438, 7), (76.50483703613281, 12)]\n",
      "[(80.47969818115234, 13), (78.65585327148438, 30), (78.35619354248047, 12), (77.95108795166016, 7), (77.13924407958984, 32)]\n",
      "[(74.01582336425781, 56), (73.06493377685547, 7), (72.37678527832031, 22), (72.268798828125, 12), (72.23491668701172, 45)]\n",
      "[(75.99742126464844, 51), (75.84595489501953, 19), (75.64875030517578, 56), (75.53626251220703, 13), (75.49124145507812, 30)]\n",
      "[(81.59979248046875, 30), (81.11270904541016, 13), (79.25505828857422, 12), (78.6693344116211, 45), (77.40476989746094, 7)]\n",
      "[(76.285888671875, 23), (75.86591339111328, 56), (75.39846801757812, 19), (74.89208984375, 13), (74.79718780517578, 45)]\n",
      "[(75.56336212158203, 12), (75.18993377685547, 56), (75.01919555664062, 30), (73.69210815429688, 13), (73.57471466064453, 32)]\n"
     ]
    }
   ],
   "source": [
    "for idx, i in enumerate(sorted_example_list):\n",
    "    print(i[:5])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "10bccc30-ee54-4dbf-9a7e-f8207fad9073",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9a24bedb-b324-4a6c-b995-f5ac6e4d8e9e",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "mixtral",
   "language": "python",
   "name": "xtuner"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
